// 定义一个空字符串 用于接收验证码
let my_code = ''
Page({
  data: {
    countDownVisible: false,
    mobile: '',
    code: '',
    redirectUrl: ''
  },
  // 收到传值 是用于登录完成 跳转到上一页去
  onLoad(options) {
    console.log('登录页面的页面栈：', options);
    // 定义一个变量 然后 把跳转的链接保存到变量中 我们登录完成 跳转到另外一个页面中
    this.data.redirectUrl = options.redirectUrl
    console.log(this.data.redirectUrl);
  },
  // 手机号码正则校验
  verifyMobile() {
    // 定义一个校验规则
    const res = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/
    const valid = res.test(this.data.mobile.trim())
    // 验证未通过
    if (!valid) wx.$utilss.toast('请填写正确的手机号')
    // 返回验证结果
    return valid
  },
  // 表单验证通过 点击获取验证码 我们可以发送请求
  async getCode() {
    // console.log(1);
    // 条件判断 若正则没通过 直接结束
    if (!this.verifyMobile()) return
    // 通过就发送请求
    const {
      code,
      data
    } = await wx.$http.get('/code', {
      mobile: this.data.mobile.trim()
    })
    if (code !== 10000) return wx.$utilss.toast('发送失败 请检查参数')
    // 请求成功 
    wx.$utilss.toast('发送成功，请查收短信')
    // 开启倒计时
    this.setData({
      countDownVisible: true,
    })
    my_code = data.code
  },
  // 点击手机号验证按钮
  copyCode() {
    // 向剪贴板 放置内容。 类似与我们平常的 ctrl+c 将内容放到剪切板里面
    wx.setClipboardData({
      data: my_code
    })
  },
  // 进行验证码的校验
  validateCode() {
    const res = /^\d{6}$/
    const valide = res.test(this.data.code.trim())
    if (!valide) wx.$utilss.toast('验证失败')
    return valide
  },
  // 点击登录按钮 发送请求 拿到token 
  async submitForm() {
    if (!this.verifyMobile() || !this.validateCode()) return
    // console.log(12);
    // 发送ajax请求 获取token 并将token存入本地存储和getApp中 让全局都可以使用
    const {
      code,
      data
    } = await wx.$http.post('/login', {
      mobile: this.data.mobile,
      code: this.data.code,
    })
    console.log(data)
    if (code !== 10000) wx.$utilss.toast('请求失败 请检查参数')
    // 把存到本地存储中的token 进行封装 因为在请求拦截器中 也需要重复存在token
    getApp().settoken(data.token, data.refreshToken)
    // 登录成功以后，先保存了token，然后再跳转回之前的页面
    // bug: 在登录成功以后，跳转的连接redirectUrl， 有可能有值，有可能为空
    // redirectUrl为空的时候，跳转不会生效，控制台也不会报错
    // 可以通过if判断 或者三元表达式来写 但是比较复杂 这里我们选择使用 逻辑中断来写
    // 逻辑中断  逻辑与 和 逻辑或
    wx.redirectTo({
      url: this.data.redirectUrl || '/page/index/index',
    })
  },

  // // 倒计时回调
  countDownChange(ev) {
    this.setData({
      timeData: ev.detail,
      countDownVisible: ev.detail.minutes === 1 || ev.detail.seconds > 0,
    })
  },
})